package br.com.projeto.task;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;

import android.os.Handler;
import android.util.Log;
import br.com.projeto.MegaSenaApplication;
import br.com.projeto.model.Jogo;

public class SalvarJogosTask extends BaseTask<Jogo, Void, Void> {

	public SalvarJogosTask(Handler handler) {
		super(handler);
	}

	@Override
	protected Void doInBackground(Jogo... params) {
		Jogo jogo = params[0];
		boolean isOk = true;

		List<String> numbers = new ArrayList<String>();
		numbers.add(jogo.getNumero1());
		numbers.add(jogo.getNumero2());
		numbers.add(jogo.getNumero3());
		numbers.add(jogo.getNumero4());
		numbers.add(jogo.getNumero5());
		numbers.add(jogo.getNumero6());

		List<String> temps = new ArrayList<String>();
		
		Iterator<String> iterator = numbers.iterator();
		int contador = 0;

		while (iterator.hasNext()) {
			String number = iterator.next();

			if (number.equals("") || number.equals("0") || number.equals("00")) {
				isOk = false;
				break;
			}

			if (Integer.parseInt(number) > 60) {
				isOk = false;
				break;
			}
			
			if (Integer.parseInt(number) < 10 && number.length() == 1) {
				temps.add("0" + number);
			} else {
				temps.add(number);
			}
			contador++;
		}

		if (isOk) {
			for (String s : temps) {
				if (temps.indexOf(s) != temps.lastIndexOf(s)) {
					isOk = false;
					break;
				}
			}
		}

		Arrays.sort(temps.toArray());
		
		if (isOk) {
			try {
				jogo.setNumero1(temps.get(0));
				jogo.setNumero2(temps.get(1));
				jogo.setNumero3(temps.get(2));
				jogo.setNumero4(temps.get(3));
				jogo.setNumero5(temps.get(4));
				jogo.setNumero6(temps.get(5));
				MegaSenaApplication.getDataBaseHelper().getCadastroDao().createOrUpdate(jogo);
			
				handler.obtainMessage(MegaSenaApplication.HANDLE_SAVE_OK).sendToTarget();
			} catch (Exception e) {
				handler.obtainMessage(MegaSenaApplication.HANDLE_SAVE_ERRO).sendToTarget();
				Log.e(TAG, "Error to save or update game: " + e);
			}
		} else {
			handler.obtainMessage(MegaSenaApplication.HANDLE_SAVE_VALIDATE).sendToTarget();
		}
		return null;
	}

}
